Odoo savant roster (contract::savants) + FIBU/ZUGFeRD OGIT inheritance fix#416
Conversation
Records the merge of the cognitive-substrate PR (33-TSV atom layer, 34-tactic recipes + 34 kernels, D-PERSONA-1 escalation). PR_ARC #411 prepend (Added/Locked/Deferred/Docs/Confidence; D0 rewrite-not-port, SPOQ lattice, datapath/control/gate partition) + LATEST_STATE shipped row. https://claude.ai/code/session_017GFLBnDy23AWBqvkbHHC41
…+ plan The lance-graph side of the woa-rs Odoo savant delegation (material: .claude/odoo/SAVANTS.md + L1-L15, imported by PR #413). contract::savants -- the 25-savant roster as data. Each Savant carries its dispatch tuple: OGIT family (Option<u8>) x reasoning::ReasoningKind x nars::InferenceType x nars::SemiringChoice x thinking::StyleCluster, plus lane + the AXIS-B decision. SAVANTS[25] + savant()/savant_by_name()/ unaligned() + query_strategy() (rides InferenceType::default_strategy). other_kind module = the 6 ReasoningKind::Other(u32) codes. Rides the already-shipped reasoning::{Reasoner,ReasoningKind} delegation surface. 3 tests green; 452 contract tests total. Plan odoo-savant-roster-v1.md + INTEGRATION_PLANS prepend: D-ODOO-1 done; D-ODOO-2 Reasoner impls per ReasoningKind, D-ODOO-3 new OGIT families (0x63 ProductCatalog, 0x90 HRFoundation) + style wiring, D-ODOO-4 Layer-2 alignment axioms for the None classes (stock.*, analytic.distribution. model, account.account.tag), D-ODOO-5 call-site conformance -- queued. Invariant: suggestion-only never un-guarded write; deterministic guard stays in woa-rs; odoo inherits FIBO/SKR slots (business = OGIT sidecar). https://claude.ai/code/session_017GFLBnDy23AWBqvkbHHC41
…p inherits FIBO/FIBU OWL
The financial subtree was flat under dolce: only odoo inherited fibofnd
(FIBO Foundations), while zugferd / fibobe / skr03 / skr04 each inherited
dolce directly — so a ZUGFeRD or SKR lookup did NOT transitively pick up
the FIBO/FIBU OWL the way an odoo lookup does.
Re-parent to fibofnd (slot 20, sorts before all four children so the
build.rs parent-known-before-child validation passes):
zugferd: dolce -> fibofnd (Factur-X e-invoicing under FIBO Foundations)
fibobe: dolce -> fibofnd (FIBO Business Entities extends FND, per real FIBO)
skr03: dolce -> fibofnd (German chart of accounts under the FIBO foundation)
skr04: dolce -> fibofnd
Family table regenerated via build.rs; lance-graph-contract green (454
tests, no inherits_from validation panic). Verified at user request
("make sure OGIT lookup inherits FIBU and ZUGFeRD-related OWL").
https://claude.ai/code/session_017GFLBnDy23AWBqvkbHHC41
📝 WalkthroughWalkthroughAdds a 25-entry Savant roster module with public types/constants, lookup helpers, query-strategy derivation and tests; updates four manifests' inheritance to ChangesOdoo Savant Roster and Module Alignment
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1f0703f528
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| // ── L8–L15 gap lanes (15) ── | ||
| Savant { id: 1, name: "FiscalPositionResolver", family: Some(0x80), kind: CustomerCategory, inference: Deduction, semiring: NarsTruth, style: Analytical, lane: "L9", decides: "which fiscal position (tax mapping) applies to a partner" }, | ||
| Savant { id: 2, name: "PartnerTrustAdvisor", family: Some(0x80), kind: CustomerCategory, inference: Revision, semiring: NarsTruth, style: Empathic, lane: "L9", decides: "partner trust / dunning-risk from payment history" }, | ||
| Savant { id: 3, name: "PricelistAssignmentAgent", family: None, kind: Other(other_kind::PRICELIST_ASSIGNMENT), inference: Revision, semiring: NarsTruth, style: Analytical, lane: "L8", decides: "partner pricelist when no explicit property (country-group/config fallback)" }, |
There was a problem hiding this comment.
Point pricelist assignment at ProductCatalog
For the L8 pricelist fallback path this keeps the savant in the family=None bucket even though the rebased base already ships the authoritative Odoo alignment for product.pricelist / product.pricelist.item under FAMILY_PRODUCT_CATALOG = 0x64 (crates/lance-graph-callcenter/src/odoo_alignment.rs). Any dispatcher or readiness check using savant_by_name("PricelistAssignmentAgent").family or unaligned() will still treat this implemented ProductCatalog route as missing an axiom, so pricing evidence cannot be routed to the newly seeded family.
Useful? React with 👍 / 👎.
| action_capabilities: {} | ||
| actor: ~ | ||
| inherits_from: dolce | ||
| inherits_from: fibofnd |
There was a problem hiding this comment.
Keep manifest parents aligned with hydrators
Changing the manifests to fibofnd only updates contract metadata; the runtime ontology hydrators for these domains still register their bundles with inherits_from: Some(OGIT::DOLCE_V1.0) (e.g. hydrate_fibo_be_from, hydrate_skr03_from, hydrate_skr04_from, and hydrate_zugferd_from). In any environment that hydrates through lance-graph-ontology, the registry will still expose direct DOLCE inheritance while lance_graph_contract::manifest reports FIBOFND, so consumers can observe conflicting parent chains instead of the intended transitive FIBO inheritance.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@crates/lance-graph-contract/src/savants.rs`:
- Around line 22-30: The ANALYTIC_MODEL_MATCH constant
(other_kind::ANALYTIC_MODEL_MATCH = 2) is defined but never used; the
"AnalyticModelScorer" savant (id: 5) currently sets kind to CustomerCategory
instead of using Other(other_kind::ANALYTIC_MODEL_MATCH). Fix by updating the
savant's kind assignment to use Other(other_kind::ANALYTIC_MODEL_MATCH) where
the "AnalyticModelScorer" is defined (or if the constant is intentionally
unused, delete/rename the constant in the other_kind module), ensuring the
ReasoningKind variant and the other_kind::ANALYTIC_MODEL_MATCH symbol are
consistent.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: c1aad02d-dc24-46a1-ad48-8d39c14384d9
📒 Files selected for processing (11)
.claude/board/AGENT_LOG.md.claude/board/INTEGRATION_PLANS.md.claude/board/LATEST_STATE.md.claude/board/PR_ARC_INVENTORY.md.claude/plans/odoo-savant-roster-v1.mdcrates/lance-graph-contract/src/lib.rscrates/lance-graph-contract/src/savants.rsmodules/fibobe/manifest.yamlmodules/skr03/manifest.yamlmodules/skr04/manifest.yamlmodules/zugferd/manifest.yaml
…oa-rs handoff) Self-contained handover asking the woa-rs session (owner of the roster + evidence schemas per SAVANTS.md) to carve out the 4 AXIS-B slots per savant — Arrow EvidenceRef schema, odoo field->signal map, property-level OWL alignment, the decision in evidence terms — so lance-graph can implement the Reasoner impls (D-ODOO-2/SAV-4) in one pass instead of cross-session ping-pong (which loses context). Pre-stubs the fixed dispatch tuple for all 25 savants (priority-tiered), the target Reasoner shape, and the open dispatch-shape question. AGENT_LOG Layer-2 handoff note prepended. https://claude.ai/code/session_017GFLBnDy23AWBqvkbHHC41
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
.claude/board/AGENT_LOG.md (1)
94-95:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAlign the recorded test total with this PR snapshot.
This entry records 452 tests, but this PR context reports 454 green after rebasing on
#414/#415. Please either update the number or annotate the exact snapshot point/date to avoid governance drift.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.claude/board/AGENT_LOG.md around lines 94 - 95, Update the test-count recorded in the lance-graph entry so it matches the current PR snapshot: change the phrase that reads "452 contract tests green." to the correct total "454 contract tests green." or alternatively append an explicit snapshot identifier/date to that sentence to indicate which commit/point the 452 count referred to; locate the sentence near the "contract::savants" / Savant roster description in the lance-graph entry and adjust it accordingly.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.claude/odoo/savants/_SCAFFOLD-EVIDENCE-CONTRACT.md:
- Line 54: Update the scaffold table to match the runtime contract in
crates/lance-graph-contract/src/savants.rs: change the PricelistAssignmentAgent
row so its family field is None (not 0x63) to match the roster, and change the
infer entry that currently lists XorBundle to Induction (XorBundle is the
semiring, not the inference mode); ensure both row entries (the one for
PricelistAssignmentAgent and the infer row) exactly mirror the symbols and
values used in savants.rs so dispatch tuples align with runtime inputs.
---
Outside diff comments:
In @.claude/board/AGENT_LOG.md:
- Around line 94-95: Update the test-count recorded in the lance-graph entry so
it matches the current PR snapshot: change the phrase that reads "452 contract
tests green." to the correct total "454 contract tests green." or alternatively
append an explicit snapshot identifier/date to that sentence to indicate which
commit/point the 452 count referred to; locate the sentence near the
"contract::savants" / Savant roster description in the lance-graph entry and
adjust it accordingly.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 9d3da19b-ea2f-4918-846f-5e6c2be07417
📒 Files selected for processing (2)
.claude/board/AGENT_LOG.md.claude/odoo/savants/_SCAFFOLD-EVIDENCE-CONTRACT.md
…mples
examples/cognitive_cycle.rs — the active-inference loop: a ThoughtCtx piped
through a tactic recipe (Elixir |> over the uniform `Tactic` behaviour),
marker-gated (Gate-bucket tactics skip in FLOW), looping until free energy
descends below the homeostasis floor ("shader rests"). Runs to rest in 2
rounds; narrates every step (which tactic fired, bucket, Δconf, gate state).
examples/savant_dispatch.rs — Odoo savant delegation: AXIS-A guard (woa-rs)
delegates the ambiguous core to a savant; dispatch is the data tuple
(family · ReasoningKind · InferenceType→QueryStrategy · Semiring · Style),
pattern-matched on ReasoningKind (Elixir case). Real savants from the roster
(PaymentToInvoiceMatcher / AutopostRecommender / FiscalPositionResolver /
SequenceGapAnomalyDetector); output is a NARS suggestion, never an un-guarded
write (Iron Rule 7).
Both `cargo run -p lance-graph-contract --example <name>` — genuine (every
call is a real contract kernel/type), self-explanatory, for a quick deep-dive.
https://claude.ai/code/session_017GFLBnDy23AWBqvkbHHC41
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
crates/lance-graph-contract/examples/savant_dispatch.rs (1)
54-60: ⚡ Quick winRun rustfmt on the
inboxliterals to match repository style.These struct literals are not
cargo fmt-normalized and should be reformatted before merge.
As per coding guidelines,**/*.rs: Format Rust code withcargo fmt --all; keep modules and functions snake_case, types PascalCase, and reusesnafuerror patterns.Proposed formatting-aligned shape
- let inbox = [ - Situation { headline: "€1,200 payment arrived — does it fully reconcile the partner's open invoices?", ambiguous: true, savant: "PaymentToInvoiceMatcher" }, - Situation { headline: "3rd identical bill from this vendor, unmodified — auto-post it?", ambiguous: true, savant: "AutopostRecommender" }, - Situation { headline: "new B2B partner in AT — which fiscal position (tax mapping)?", ambiguous: true, savant: "FiscalPositionResolver" }, - Situation { headline: "journal sequence jumps 1042 → 1044 — is 1043 a deleted posted entry?", ambiguous: true, savant: "SequenceGapAnomalyDetector" }, - Situation { headline: "invoice with a perfectly matching single open item", ambiguous: false, savant: "ReconcileMatchSelector" }, - ]; + let inbox = [ + Situation { + headline: "€1,200 payment arrived — does it fully reconcile the partner's open invoices?", + ambiguous: true, + savant: "PaymentToInvoiceMatcher", + }, + Situation { + headline: "3rd identical bill from this vendor, unmodified — auto-post it?", + ambiguous: true, + savant: "AutopostRecommender", + }, + Situation { + headline: "new B2B partner in AT — which fiscal position (tax mapping)?", + ambiguous: true, + savant: "FiscalPositionResolver", + }, + Situation { + headline: "journal sequence jumps 1042 → 1044 — is 1043 a deleted posted entry?", + ambiguous: true, + savant: "SequenceGapAnomalyDetector", + }, + Situation { + headline: "invoice with a perfectly matching single open item", + ambiguous: false, + savant: "ReconcileMatchSelector", + }, + ];🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@crates/lance-graph-contract/examples/savant_dispatch.rs` around lines 54 - 60, The inbox array of Situation struct literals (variable name inbox, type Situation) is not formatted to repository style; run rustfmt/cargo fmt (e.g., cargo fmt --all) or manually reflow these literals so they match the repo's formatting rules (align fields and spacing, enforce snake_case/PascalCase conventions where applicable) and commit the reformatted crate/examples/savant_dispatch.rs with the corrected inbox literals.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@crates/lance-graph-contract/examples/cognitive_cycle.rs`:
- Around line 43-44: The final summary always reports reaching GateState::Flow
even when the loop exited due to round cap; update the post-loop reporting to
check gate_state(ctx.sd) == GateState::Flow (or the recorded gate state) and
conditionally print a FLOW-reached message only in that case, otherwise print a
message that the loop ended due to hitting the round limit; apply the same
conditional logic to the other occurrence around the code referenced at the
second site (the block near lines 70-71) so both summaries distinguish FLOW exit
vs round-cap exit.
---
Nitpick comments:
In `@crates/lance-graph-contract/examples/savant_dispatch.rs`:
- Around line 54-60: The inbox array of Situation struct literals (variable name
inbox, type Situation) is not formatted to repository style; run rustfmt/cargo
fmt (e.g., cargo fmt --all) or manually reflow these literals so they match the
repo's formatting rules (align fields and spacing, enforce snake_case/PascalCase
conventions where applicable) and commit the reformatted
crate/examples/savant_dispatch.rs with the corrected inbox literals.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: d1a4996e-c14f-4016-8a05-0a25d14de495
📒 Files selected for processing (2)
crates/lance-graph-contract/examples/cognitive_cycle.rscrates/lance-graph-contract/examples/savant_dispatch.rs
- savants: PricelistAssignmentAgent family None → Some(0x64) (ProductCatalog, matches #414); drop dead other_kind::ANALYTIC_MODEL_MATCH const - hydrators: complete the FIBU re-parent on the runtime side — fibo_be / skr03 / skr04 / zugferd inherits_from DOLCE → FIBOFND (FND stays DOLCE); update the three hydrator smoke tests' inheritance assertions to match - cognitive_cycle example: rest message distinguishes FLOW vs round-cap - scaffold + roster plan: 0x63 → 0x64 ProductCatalog; Induction(XorBundle) → Induction https://claude.ai/code/session_017GFLBnDy23AWBqvkbHHC41
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@crates/lance-graph-ontology/src/hydrators/skr_datev.rs`:
- Around line 49-50: Update the module-level documentation to reflect the new
parent chain: change any mention that the ontology inherits directly from DOLCE
to state that it now inherits from FIBOFND (OGIT::FIBOFND_V1.0) and adjust any
descriptive parent-chain text to include FIBOFND as the immediate parent; search
for the doc comments near the declarations referencing DOLCE (also the other
occurrence around the block with inherits_from: Some(OGIT::FIBOFND_V1.0) and
starting_entity_id: 100) and edit them so the prose and examples consistently
describe FIBOFND as the parent instead of DOLCE.
In `@crates/lance-graph-ontology/src/hydrators/zugferd.rs`:
- Line 86: Update the module-level doc comment in the zugferd hydrator to
reflect that this ontology now inherits from FIBOFND instead of DOLCE; locate
the top-of-file doc comment in
crates::lance-graph-ontology::hydrators::zugferd.rs and change any mention of
"DOLCE" to "FIBOFND" (or explain that it inherits from OGIT::FIBOFND_V1.0) so it
matches the code line inherits_from: Some(OGIT::FIBOFND_V1.0).
In `@crates/lance-graph-ontology/tests/skr_hydrator_smoke.rs`:
- Line 30: The test's documentation/header in skr_hydrator_smoke.rs is stale
(mentions DOLCE inheritance) while the assertions check bundle.inherits_from ==
Some(OGIT::FIBOFND_V1.0); update the test header/comments to state that SKR
bundles use FIBOFND inheritance instead of DOLCE, and make the same comment
change for the other occurrence referenced around the second assertion (the
other bundle.inherits_from check).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 791678e8-2cd4-4f75-86f6-0b7691aeefe6
📒 Files selected for processing (10)
.claude/odoo/savants/_SCAFFOLD-EVIDENCE-CONTRACT.md.claude/plans/odoo-savant-roster-v1.mdcrates/lance-graph-contract/examples/cognitive_cycle.rscrates/lance-graph-contract/src/savants.rscrates/lance-graph-ontology/src/hydrators/fibo.rscrates/lance-graph-ontology/src/hydrators/skr_datev.rscrates/lance-graph-ontology/src/hydrators/zugferd.rscrates/lance-graph-ontology/tests/fibo_be_hydrator_smoke.rscrates/lance-graph-ontology/tests/skr_hydrator_smoke.rscrates/lance-graph-ontology/tests/zugferd_hydrator_smoke.rs
✅ Files skipped from review due to trivial changes (2)
- .claude/plans/odoo-savant-roster-v1.md
- .claude/odoo/savants/_SCAFFOLD-EVIDENCE-CONTRACT.md
🚧 Files skipped from review as they are similar to previous changes (2)
- crates/lance-graph-contract/examples/cognitive_cycle.rs
- crates/lance-graph-contract/src/savants.rs
| inherits_from: Some(OGIT::FIBOFND_V1.0), | ||
| starting_entity_id: 100, |
There was a problem hiding this comment.
Update stale module docs to match the new parent chain.
The implementation now inherits from FIBOFND, but the module docs still describe direct DOLCE inheritance.
✏️ Suggested doc fix
-//! SKR 03 and SKR 04 each declare `inherits_from: Some(OGIT::DOLCE_V1.0)` —
-//! accounts are abstract economic objects, anchored to DUL Object via the
-//! cognitive shader's downstream alignment axioms (not baked in here).
+//! SKR 03 and SKR 04 each declare `inherits_from: Some(OGIT::FIBOFND_V1.0)` —
+//! accounts are aligned under the FIBO foundation layer (which itself
+//! chains to DOLCE via FIBOFND).Also applies to: 95-96
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@crates/lance-graph-ontology/src/hydrators/skr_datev.rs` around lines 49 - 50,
Update the module-level documentation to reflect the new parent chain: change
any mention that the ontology inherits directly from DOLCE to state that it now
inherits from FIBOFND (OGIT::FIBOFND_V1.0) and adjust any descriptive
parent-chain text to include FIBOFND as the immediate parent; search for the doc
comments near the declarations referencing DOLCE (also the other occurrence
around the block with inherits_from: Some(OGIT::FIBOFND_V1.0) and
starting_entity_id: 100) and edit them so the prose and examples consistently
describe FIBOFND as the parent instead of DOLCE.
| version: OGIT::ZUGFERD_V1.1, | ||
| domain_name: "zugferd".to_string(), | ||
| inherits_from: Some(OGIT::DOLCE_V1.0), | ||
| inherits_from: Some(OGIT::FIBOFND_V1.0), |
There was a problem hiding this comment.
Refresh module docs to reflect FIBOFND inheritance.
The code now uses FIBOFND, but the top-level doc comment still says DOLCE.
✏️ Suggested doc fix
-//! Declares `inherits_from: Some(OGIT::DOLCE_V1.0)`. Alignment to upstream
-//! ontologies (FIBO MonetaryAmount, DUL Description, schema.org Invoice)
-//! is left as an explicit downstream assertion, not baked into the XSD.
+//! Declares `inherits_from: Some(OGIT::FIBOFND_V1.0)` so ZUGFeRD aligns
+//! under the FIBO foundation chain. Additional semantic alignment remains
+//! an explicit downstream assertion, not baked into the XSD.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| inherits_from: Some(OGIT::FIBOFND_V1.0), | |
| //! Declares `inherits_from: Some(OGIT::FIBOFND_V1.0)` so ZUGFeRD aligns | |
| //! under the FIBO foundation chain. Additional semantic alignment remains | |
| //! an explicit downstream assertion, not baked into the XSD. |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@crates/lance-graph-ontology/src/hydrators/zugferd.rs` at line 86, Update the
module-level doc comment in the zugferd hydrator to reflect that this ontology
now inherits from FIBOFND instead of DOLCE; locate the top-of-file doc comment
in crates::lance-graph-ontology::hydrators::zugferd.rs and change any mention of
"DOLCE" to "FIBOFND" (or explain that it inherits from OGIT::FIBOFND_V1.0) so it
matches the code line inherits_from: Some(OGIT::FIBOFND_V1.0).
| assert_eq!(bundle.g, OGIT::SKR03_V1.0); | ||
| assert_eq!(bundle.domain_name, "skr03"); | ||
| assert_eq!(bundle.inherits_from, Some(OGIT::DOLCE_V1.0)); | ||
| assert_eq!(bundle.inherits_from, Some(OGIT::FIBOFND_V1.0)); |
There was a problem hiding this comment.
Fix stale test-module docs about inheritance.
The test header still says SKR bundles use DOLCE inheritance, but assertions now validate FIBOFND.
✏️ Suggested doc fix
-//! - Both schemes hydrate into separate G slots with the correct domain
-//! and DOLCE inheritance.
+//! - Both schemes hydrate into separate G slots with the correct domain
+//! and FIBOFND inheritance.Also applies to: 49-49
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@crates/lance-graph-ontology/tests/skr_hydrator_smoke.rs` at line 30, The
test's documentation/header in skr_hydrator_smoke.rs is stale (mentions DOLCE
inheritance) while the assertions check bundle.inherits_from ==
Some(OGIT::FIBOFND_V1.0); update the test header/comments to state that SKR
bundles use FIBOFND inheritance instead of DOLCE, and make the same comment
change for the other occurrence referenced around the second assertion (the
other bundle.inherits_from check).
…tion + E-CODEBOOK-INHERITS-FROM-OGIT Per the 2026-05-28 user-given doctrine (distilled across four messages): "every data is now LE-byte contract SoA in each mailbox / bitpacked is also only a desperation bucket / normally LE SoA should have codebook for everything including semantic ontology graph / inherited from OGIT because the SoA doesn't guess." Adds the canonical identity layer that supersedes the bitpacked RoleKey form shipped in feaa587: **New: crates/lance-graph-contract/src/callcenter/ogit_uris.rs (8 tests)** - SAVANT_OGIT_BASE = "https://ogit.adaworldapi.com/callcenter/savants#" - SAVANT_OGIT_URIS: LazyLock<[String; 25]> — one URI per savant, roster order - savant_ogit_uri(id) / savant_ogit_uri_by_name(name) — lookup helpers - 8 unit tests: uris_match_savant_count, uris_use_canonical_namespace, id_1_resolves_to_fiscal_position_resolver, id_16_is_absent, id_26_resolves_to_backorder_judge, id_lookup_matches_name_lookup, nonexistent_name_returns_none, every_savant_in_roster_has_a_uri Resolves through `lance-graph-ontology::registry::OntologyRegistry` (infrastructure already shipped — PR #407/#408 hydrators, PR #412 DOLCE classifier, PR #416 FIBU/FIBO alignment, the canonical lingua-franca path). The OntologyRegistry resolves the URI to a stable u32 codebook code; the LE-byte mailbox SoA columns store the code. The Baton (u16, CausalEdge64) carries the code across mailbox boundaries. **Updated: contract::callcenter::role_keys (doc-only update)** Module-level documentation now explicitly flags the bitpacked RoleKey slices as the desperation-bucket fallback per the new doctrine; canonical savant identity is via the OGIT URI in ogit_uris. Code unchanged (still compiled, 7 tests still pass) — usable for ephemeral in-mailbox Hamming compare where codebook lookup is unavailable. **Updated: contract::callcenter::mod.rs** Re-exports the new ogit_uris module + adds the two-identity-layer rationale in the module doc (canonical OGIT URI + desperation-bucket RoleKey). **Prepended: .claude/board/EPIPHANIES.md — E-CODEBOOK-INHERITS-FROM-OGIT** Captures the full doctrine across all four 2026-05-28 messages: Vsa16kF32 deprecated, LE-byte SoA per mailbox, codebook for everything, inheritance from OGIT, Kontenerkennung-style multi-dim rich codebook (parent chain + NARS confidence per link + business × transaction × form × regulation × law × entity × product), audit query layer (episodic + AriGraph SPO-G + regulation-ontology + NARS confidence threshold). **Queued (separate D-ids, captured in the EPIPHANIES entry):** - (a) data/ontologies/ogit/callcenter/savants.ttl + OntologyRegistry hydration for the 25 savants - (b) Kontenerkennung-style inheritance struct with NARS confidence per parent link - (c) regulation-ontology codebook (HGB / GoB / AO / UStG / IFRS / GoBD) - (d) audit-threshold dispatch in cognitive-shader-driver (NARS confidence vs audit_floor → CausalEdge64 emission or escalation Baton) Tests: 15 callcenter tests total (8 new ogit_uris + 7 existing role_keys); 454 prior contract lib tests unaffected. https://claude.ai/code/session_017gZ6sPRXYPj5n7uJ7NBtRv
…tion + E-CODEBOOK-INHERITS-FROM-OGIT Per the 2026-05-28 user-given doctrine (distilled across four messages): "every data is now LE-byte contract SoA in each mailbox / bitpacked is also only a desperation bucket / normally LE SoA should have codebook for everything including semantic ontology graph / inherited from OGIT because the SoA doesn't guess." Adds the canonical identity layer that supersedes the bitpacked RoleKey form shipped in feaa587: **New: crates/lance-graph-contract/src/callcenter/ogit_uris.rs (8 tests)** - SAVANT_OGIT_BASE = "https://ogit.adaworldapi.com/callcenter/savants#" - SAVANT_OGIT_URIS: LazyLock<[String; 25]> — one URI per savant, roster order - savant_ogit_uri(id) / savant_ogit_uri_by_name(name) — lookup helpers - 8 unit tests: uris_match_savant_count, uris_use_canonical_namespace, id_1_resolves_to_fiscal_position_resolver, id_16_is_absent, id_26_resolves_to_backorder_judge, id_lookup_matches_name_lookup, nonexistent_name_returns_none, every_savant_in_roster_has_a_uri Resolves through `lance-graph-ontology::registry::OntologyRegistry` (infrastructure already shipped — PR #407/#408 hydrators, PR #412 DOLCE classifier, PR #416 FIBU/FIBO alignment, the canonical lingua-franca path). The OntologyRegistry resolves the URI to a stable u32 codebook code; the LE-byte mailbox SoA columns store the code. The Baton (u16, CausalEdge64) carries the code across mailbox boundaries. **Updated: contract::callcenter::role_keys (doc-only update)** Module-level documentation now explicitly flags the bitpacked RoleKey slices as the desperation-bucket fallback per the new doctrine; canonical savant identity is via the OGIT URI in ogit_uris. Code unchanged (still compiled, 7 tests still pass) — usable for ephemeral in-mailbox Hamming compare where codebook lookup is unavailable. **Updated: contract::callcenter::mod.rs** Re-exports the new ogit_uris module + adds the two-identity-layer rationale in the module doc (canonical OGIT URI + desperation-bucket RoleKey). **Prepended: .claude/board/EPIPHANIES.md — E-CODEBOOK-INHERITS-FROM-OGIT** Captures the full doctrine across all four 2026-05-28 messages: Vsa16kF32 deprecated, LE-byte SoA per mailbox, codebook for everything, inheritance from OGIT, Kontenerkennung-style multi-dim rich codebook (parent chain + NARS confidence per link + business × transaction × form × regulation × law × entity × product), audit query layer (episodic + AriGraph SPO-G + regulation-ontology + NARS confidence threshold). **Queued (separate D-ids, captured in the EPIPHANIES entry):** - (a) data/ontologies/ogit/callcenter/savants.ttl + OntologyRegistry hydration for the 25 savants - (b) Kontenerkennung-style inheritance struct with NARS confidence per parent link - (c) regulation-ontology codebook (HGB / GoB / AO / UStG / IFRS / GoBD) - (d) audit-threshold dispatch in cognitive-shader-driver (NARS confidence vs audit_floor → CausalEdge64 emission or escalation Baton) Tests: 15 callcenter tests total (8 new ogit_uris + 7 existing role_keys); 454 prior contract lib tests unaffected. https://claude.ai/code/session_017gZ6sPRXYPj5n7uJ7NBtRv
…tion + E-CODEBOOK-INHERITS-FROM-OGIT Per the 2026-05-28 user-given doctrine (distilled across four messages): "every data is now LE-byte contract SoA in each mailbox / bitpacked is also only a desperation bucket / normally LE SoA should have codebook for everything including semantic ontology graph / inherited from OGIT because the SoA doesn't guess." Adds the canonical identity layer that supersedes the bitpacked RoleKey form shipped in feaa587: **New: crates/lance-graph-contract/src/callcenter/ogit_uris.rs (8 tests)** - SAVANT_OGIT_BASE = "https://ogit.adaworldapi.com/callcenter/savants#" - SAVANT_OGIT_URIS: LazyLock<[String; 25]> — one URI per savant, roster order - savant_ogit_uri(id) / savant_ogit_uri_by_name(name) — lookup helpers - 8 unit tests: uris_match_savant_count, uris_use_canonical_namespace, id_1_resolves_to_fiscal_position_resolver, id_16_is_absent, id_26_resolves_to_backorder_judge, id_lookup_matches_name_lookup, nonexistent_name_returns_none, every_savant_in_roster_has_a_uri Resolves through `lance-graph-ontology::registry::OntologyRegistry` (infrastructure already shipped — PR #407/#408 hydrators, PR #412 DOLCE classifier, PR #416 FIBU/FIBO alignment, the canonical lingua-franca path). The OntologyRegistry resolves the URI to a stable u32 codebook code; the LE-byte mailbox SoA columns store the code. The Baton (u16, CausalEdge64) carries the code across mailbox boundaries. **Updated: contract::callcenter::role_keys (doc-only update)** Module-level documentation now explicitly flags the bitpacked RoleKey slices as the desperation-bucket fallback per the new doctrine; canonical savant identity is via the OGIT URI in ogit_uris. Code unchanged (still compiled, 7 tests still pass) — usable for ephemeral in-mailbox Hamming compare where codebook lookup is unavailable. **Updated: contract::callcenter::mod.rs** Re-exports the new ogit_uris module + adds the two-identity-layer rationale in the module doc (canonical OGIT URI + desperation-bucket RoleKey). **Prepended: .claude/board/EPIPHANIES.md — E-CODEBOOK-INHERITS-FROM-OGIT** Captures the full doctrine across all four 2026-05-28 messages: Vsa16kF32 deprecated, LE-byte SoA per mailbox, codebook for everything, inheritance from OGIT, Kontenerkennung-style multi-dim rich codebook (parent chain + NARS confidence per link + business × transaction × form × regulation × law × entity × product), audit query layer (episodic + AriGraph SPO-G + regulation-ontology + NARS confidence threshold). **Queued (separate D-ids, captured in the EPIPHANIES entry):** - (a) data/ontologies/ogit/callcenter/savants.ttl + OntologyRegistry hydration for the 25 savants - (b) Kontenerkennung-style inheritance struct with NARS confidence per parent link - (c) regulation-ontology codebook (HGB / GoB / AO / UStG / IFRS / GoBD) - (d) audit-threshold dispatch in cognitive-shader-driver (NARS confidence vs audit_floor → CausalEdge64 emission or escalation Baton) Tests: 15 callcenter tests total (8 new ogit_uris + 7 existing role_keys); 454 prior contract lib tests unaffected. https://claude.ai/code/session_017gZ6sPRXYPj5n7uJ7NBtRv
…tion + E-CODEBOOK-INHERITS-FROM-OGIT Per the 2026-05-28 user-given doctrine (distilled across four messages): "every data is now LE-byte contract SoA in each mailbox / bitpacked is also only a desperation bucket / normally LE SoA should have codebook for everything including semantic ontology graph / inherited from OGIT because the SoA doesn't guess." Adds the canonical identity layer that supersedes the bitpacked RoleKey form shipped in feaa587: **New: crates/lance-graph-contract/src/callcenter/ogit_uris.rs (8 tests)** - SAVANT_OGIT_BASE = "https://ogit.adaworldapi.com/callcenter/savants#" - SAVANT_OGIT_URIS: LazyLock<[String; 25]> — one URI per savant, roster order - savant_ogit_uri(id) / savant_ogit_uri_by_name(name) — lookup helpers - 8 unit tests: uris_match_savant_count, uris_use_canonical_namespace, id_1_resolves_to_fiscal_position_resolver, id_16_is_absent, id_26_resolves_to_backorder_judge, id_lookup_matches_name_lookup, nonexistent_name_returns_none, every_savant_in_roster_has_a_uri Resolves through `lance-graph-ontology::registry::OntologyRegistry` (infrastructure already shipped — PR #407/#408 hydrators, PR #412 DOLCE classifier, PR #416 FIBU/FIBO alignment, the canonical lingua-franca path). The OntologyRegistry resolves the URI to a stable u32 codebook code; the LE-byte mailbox SoA columns store the code. The Baton (u16, CausalEdge64) carries the code across mailbox boundaries. **Updated: contract::callcenter::role_keys (doc-only update)** Module-level documentation now explicitly flags the bitpacked RoleKey slices as the desperation-bucket fallback per the new doctrine; canonical savant identity is via the OGIT URI in ogit_uris. Code unchanged (still compiled, 7 tests still pass) — usable for ephemeral in-mailbox Hamming compare where codebook lookup is unavailable. **Updated: contract::callcenter::mod.rs** Re-exports the new ogit_uris module + adds the two-identity-layer rationale in the module doc (canonical OGIT URI + desperation-bucket RoleKey). **Prepended: .claude/board/EPIPHANIES.md — E-CODEBOOK-INHERITS-FROM-OGIT** Captures the full doctrine across all four 2026-05-28 messages: Vsa16kF32 deprecated, LE-byte SoA per mailbox, codebook for everything, inheritance from OGIT, Kontenerkennung-style multi-dim rich codebook (parent chain + NARS confidence per link + business × transaction × form × regulation × law × entity × product), audit query layer (episodic + AriGraph SPO-G + regulation-ontology + NARS confidence threshold). **Queued (separate D-ids, captured in the EPIPHANIES entry):** - (a) data/ontologies/ogit/callcenter/savants.ttl + OntologyRegistry hydration for the 25 savants - (b) Kontenerkennung-style inheritance struct with NARS confidence per parent link - (c) regulation-ontology codebook (HGB / GoB / AO / UStG / IFRS / GoBD) - (d) audit-threshold dispatch in cognitive-shader-driver (NARS confidence vs audit_floor → CausalEdge64 emission or escalation Baton) Tests: 15 callcenter tests total (8 new ogit_uris + 7 existing role_keys); 454 prior contract lib tests unaffected. https://claude.ai/code/session_017gZ6sPRXYPj5n7uJ7NBtRv
- savants: PricelistAssignmentAgent family None → Some(0x64) (ProductCatalog, matches #414); drop dead other_kind::ANALYTIC_MODEL_MATCH const - hydrators: complete the FIBU re-parent on the runtime side — fibo_be / skr03 / skr04 / zugferd inherits_from DOLCE → FIBOFND (FND stays DOLCE); update the three hydrator smoke tests' inheritance assertions to match - cognitive_cycle example: rest message distinguishes FLOW vs round-cap - scaffold + roster plan: 0x63 → 0x64 ProductCatalog; Induction(XorBundle) → Induction https://claude.ai/code/session_017GFLBnDy23AWBqvkbHHC41
…erer-MAOO0 Odoo savant roster (contract::savants) + FIBU/ZUGFeRD OGIT inheritance fix
…tion + E-CODEBOOK-INHERITS-FROM-OGIT Per the 2026-05-28 user-given doctrine (distilled across four messages): "every data is now LE-byte contract SoA in each mailbox / bitpacked is also only a desperation bucket / normally LE SoA should have codebook for everything including semantic ontology graph / inherited from OGIT because the SoA doesn't guess." Adds the canonical identity layer that supersedes the bitpacked RoleKey form shipped in feaa587: **New: crates/lance-graph-contract/src/callcenter/ogit_uris.rs (8 tests)** - SAVANT_OGIT_BASE = "https://ogit.adaworldapi.com/callcenter/savants#" - SAVANT_OGIT_URIS: LazyLock<[String; 25]> — one URI per savant, roster order - savant_ogit_uri(id) / savant_ogit_uri_by_name(name) — lookup helpers - 8 unit tests: uris_match_savant_count, uris_use_canonical_namespace, id_1_resolves_to_fiscal_position_resolver, id_16_is_absent, id_26_resolves_to_backorder_judge, id_lookup_matches_name_lookup, nonexistent_name_returns_none, every_savant_in_roster_has_a_uri Resolves through `lance-graph-ontology::registry::OntologyRegistry` (infrastructure already shipped — PR #407/#408 hydrators, PR #412 DOLCE classifier, PR #416 FIBU/FIBO alignment, the canonical lingua-franca path). The OntologyRegistry resolves the URI to a stable u32 codebook code; the LE-byte mailbox SoA columns store the code. The Baton (u16, CausalEdge64) carries the code across mailbox boundaries. **Updated: contract::callcenter::role_keys (doc-only update)** Module-level documentation now explicitly flags the bitpacked RoleKey slices as the desperation-bucket fallback per the new doctrine; canonical savant identity is via the OGIT URI in ogit_uris. Code unchanged (still compiled, 7 tests still pass) — usable for ephemeral in-mailbox Hamming compare where codebook lookup is unavailable. **Updated: contract::callcenter::mod.rs** Re-exports the new ogit_uris module + adds the two-identity-layer rationale in the module doc (canonical OGIT URI + desperation-bucket RoleKey). **Prepended: .claude/board/EPIPHANIES.md — E-CODEBOOK-INHERITS-FROM-OGIT** Captures the full doctrine across all four 2026-05-28 messages: Vsa16kF32 deprecated, LE-byte SoA per mailbox, codebook for everything, inheritance from OGIT, Kontenerkennung-style multi-dim rich codebook (parent chain + NARS confidence per link + business × transaction × form × regulation × law × entity × product), audit query layer (episodic + AriGraph SPO-G + regulation-ontology + NARS confidence threshold). **Queued (separate D-ids, captured in the EPIPHANIES entry):** - (a) data/ontologies/ogit/callcenter/savants.ttl + OntologyRegistry hydration for the 25 savants - (b) Kontenerkennung-style inheritance struct with NARS confidence per parent link - (c) regulation-ontology codebook (HGB / GoB / AO / UStG / IFRS / GoBD) - (d) audit-threshold dispatch in cognitive-shader-driver (NARS confidence vs audit_floor → CausalEdge64 emission or escalation Baton) Tests: 15 callcenter tests total (8 new ogit_uris + 7 existing role_keys); 454 prior contract lib tests unaffected. https://claude.ai/code/session_017gZ6sPRXYPj5n7uJ7NBtRv
Summary
The lance-graph side of the woa-rs Odoo savant delegation, plus an ontology inheritance fix. Rebased linear on
main(incl. #414/#415) — 3 commits, no merge bubbles.contract::savants: the 25-savant roster as data (from.claude/odoo/SAVANTS.md+ L1–L15, PR docs(odoo): import Odoo savant briefing pack into .claude/odoo #413). EachSavantcarries its dispatch tuple — OGIT family (Option<u8>) ×reasoning::ReasoningKind×nars::InferenceType×nars::SemiringChoice×thinking::StyleCluster— plus lane + the AXIS-B decision.SAVANTS[25]+savant()/savant_by_name()/unaligned()+query_strategy()(ridesInferenceType::default_strategy).other_kind= the 6ReasoningKind::Other(u32)codes. Rides the already-shippedreasoning::{Reasoner, ReasoningContext, ReasoningKind}delegation surface. 3 tests.fibofndso a ZUGFeRD/SKR lookup transitively inherits the FIBO/FIBU OWL (it was flat underdolce; onlyodoohadfibofnd):zugferd,fibobe,skr03,skr04:inherits_from: dolce → fibofnd.build.rs(fibofnd@20 sorts before all children → parent-known validation passes).PR_ARC_INVENTORY+LATEST_STATE;odoo-savant-roster-v1plan + INTEGRATION_PLANS prepend (with a sibling cross-note to feat(callcenter): odoo savant families + Layer-2 axioms + style wiring (D-ODOO-SAV-1/2/3) #414'sodoo-savant-reasoners-v1).Relationship to #414
#414 (
odoo-savant-reasoners-v1, another session) shipped the callcenter-side families0x63/0x90+ Layer-2 alignment axioms + style wiring (D-ODOO-SAV-1/2/3). This PR is the complementary contract-side roster (D-ODOO-1). They converge; the two D-id schemes are reconciled in the plan and will fully merge when theReasonerimpls (D-ODOO-2 / SAV-4) land.Test plan
cargo test -p lance-graph-contract— 454 green on top of feat(callcenter): odoo savant families + Layer-2 axioms + style wiring (D-ODOO-SAV-1/2/3) #414/epiphany(board): E-CONTRACT-NO-SERIALIZE — contracts compile types, membranes serialize #415 (savants 3 + recipes/atoms/escalation + all prior)build.rsregenerates the family table with the re-parented FIBU subtree — noinherits_fromvalidation panicInvariants
suggestion-only never un-guarded write (Iron Rule 7) · deterministic guard stays in woa-rs (AXIS-A) · BBB-allowed crates only · savant tuple fully determines dispatch · business = OGIT-inherited sidecar (odoo/zugferd/skr inherit the FIBO foundation;
0x63/0x90are the only new families).https://claude.ai/code/session_017GFLBnDy23AWBqvkbHHC41
Generated by Claude Code
Summary by CodeRabbit
New Features
Documentation
Tests
Chores